package br.requisiteworks.util.persistencia;

import java.util.List;

import br.requisiteworks.util.Entidade;

/**
 * Interface com os metodos que todas as DAOs devem implementar
 * 
 * @author Mikhail Domanoski
 * 
 * @version 1, 01/04/2010
 * 
 * @param <T> O tipo da entidade que a DAO controla
 */
public interface DaoComum<T extends Entidade> {

	/**
	 * Selectiona todos os itens do tipo <T> na base de dados
	 * 
	 * @return uma lista com todos os itens do tipo <T> cadastrados na base de
	 *         dados
	 */
	public List<T> select() throws ResultadoVazio;

	/**
	 * Atualiza <b>entidade</b> na base de dados
	 */
	public void update(T entidate) throws ErroBancoDados;

	/**
	 * <p>
	 * Deleta <b>entidade</b> da base de dados
	 * 
	 * <p>
	 * <b>IMPORTANTE:</b> Ao implementar o metodo <b>delete</b> verificar a
	 * necessidade de apagar ou apenas desativar o registro.
	 */
	public void delete(T entidate) throws ErroBancoDados;

	/**
	 * Insere <b>entidade</b> na base de dados
	 */
	public void insert(T entidate) throws ErroBancoDados;
}
